home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / misc / date2day.lha / src / gcc / date2day.c < prev    next >
Encoding:
Text File  |  1995-04-10  |  1.6 KB  |  82 lines

  1. /*  date2day
  2.     (c) Armin.Obersteiner@giga.or.at
  3.  
  4.     input: <int> day,month,year
  5.     output:<int> 0,1-7
  6.  
  7.     0: error (before 1.1.1801 - this should be enough
  8.               if somebody knows a "day" before that please mail it to me)
  9.  
  10.     1-7: Monday-Sunday
  11.  
  12.     gcc: link with math lib !!
  13. */
  14.  
  15. int date2day(int day,int month,int year)
  16. {
  17.     int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  18.  
  19.     int j,i=0;
  20.     int jahr=0;
  21.     int s;
  22.  
  23.     if(year<1801) return 0;
  24.     if( (month<1) || (month>12) ) return 0;
  25.     if(day<1) return 0;
  26.  
  27.     s=sjahr(year);
  28.  
  29.     if( (day>md[month-1]) )
  30.     {
  31.         if(!s) return 0;
  32.         if( (s) && (month=2) && (day>29) ) return 0;
  33.     }
  34.  
  35.     for(j=1801;j<year;j++) if(sjahr(j)) i++;
  36.  
  37.     jahr=(year-1801)*365+i+day;
  38.  
  39.     for(i=1;i<month;i++) jahr=jahr+md[i-1];
  40.     if(s && (month>2)) jahr=jahr+1;
  41.  
  42.     switch((int)fmod((double)jahr,(double)7))
  43.     {
  44.         case 1: return 4;   /* 1.1.1801 is a Thursday ->4 */
  45.                     break;
  46.         case 2: return 5;
  47.                     break;
  48.         case 3: return 6;
  49.                     break;
  50.         case 4: return 7;
  51.                     break;
  52.         case 5: return 1;
  53.                     break;
  54.         case 6: return 2;
  55.                     break;
  56.         case 0: return 3;
  57.                     break;
  58.     }
  59. }
  60.  
  61. /*  sjahr
  62.     (c) Armin.Obersteiner@giga.or.at
  63.  
  64.     input:  <int> year
  65.     output: <int> 0,1
  66.  
  67.     0: normal year
  68.     1: leap-year
  69.  
  70.     gcc: link with math lib !!
  71. */
  72.  
  73. int sjahr(int year)
  74. {
  75.     int schalt=0;
  76.  
  77.     if(fmod((double)year,(double)4)==0) schalt=1;
  78.     if(fmod((double)year,(double)100)==0) if(fmod((double)year,(double)400)!=0) schalt=0;
  79.  
  80.     return schalt;
  81. }
  82.